package com.fiberhome.nas.core.network.service

import com.fiberhome.nas.core.model.entity.PhotoInfo
import com.fiberhome.nas.core.model.entity.TimeBucketInfo
import com.fiberhome.nas.core.model.response.ListData
import com.fiberhome.nas.core.model.response.NetworkResponse
import com.fiberhome.nas.core.model.response.UploadResult
import okhttp3.MultipartBody
import retrofit2.http.GET
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Path
import retrofit2.http.Query

interface PhotoService {


    /**
     * 获取相册时间桶列表
     */
    @GET("api/v1/tscss/timeline/buckets")
    suspend fun getTimeBuckets(
        @Query("size") size: String, //时间桶参数，传DAY或MONTH
        @Query("albumId") albumId: String? = null,  //相册 Id，用于查询指定相册下面所有的时间桶列表
        @Query("sceneId") sceneId: String? = null,  //场景 Id，用于查询指定场景下面所有的时间桶列表
        @Query("peopleId") peopleId: String? = null //人物 Id，用于查询指定人物下面所有的时间桶列表
    ): NetworkResponse<ListData<TimeBucketInfo>>


    /**
     * 获取相册时间桶内文件列表
     */
    @GET("api/v1/tscss/timeline/bucket")
    suspend fun getTimeBucket(
        @Query("size") size: String, //时间桶参数，DAY、MONTH 两个参数
        @Query("timeBucket") timeBucket: String, //返回指定时间桶内的所有文件列表
        @Query("isTrashed") isTrashed: Boolean? = false,  //是否返回已删除相册的文件列表，默认为 false
        @Query("albumId") albumId: String? = null,  //相册 Id，用于查询指定相册下面所有的时间桶列表
        @Query("sceneId") sceneId: String? = null,  //场景 Id，用于查询指定场景下面所有的时间桶列表
        @Query("peopleId") peopleId: String? = null //人物 Id，用于查询指定人物下面所有的时间桶列表
    ): NetworkResponse<ListData<PhotoInfo>>

    /**
     * 获取相册文件详细信息
     */
    @GET("api/v1/tscss/assets/{id}")
    suspend fun getPhotoInfo(
        @Path("id") id: String  //相册文件id
    ): NetworkResponse<PhotoInfo>

    /**
     * 上传文件
     */
    @Multipart
    @POST("api/v1/tscss/assets")
    suspend fun uploadPhoto(
        @Part("deviceAssetId") deviceAssetId: String,
        @Part("deviceId") deviceId: String,
        @Part("fileName") fileName: String,
        @Part("fileCreatedAt") fileCreatedAt: String,
        @Part("fileModifiedAt") fileModifiedAt: String,
        @Part("isFavorite") isFavorite: String,
        @Part("chunkOffset") chunkOffset: String,
        @Part("duration") duration: String,
        @Part("chunkSize") chunkSize: String,
        @Part("chunkNumber") chunkNumber: String,
        @Part("chunkHash") chunkHash: String,
        @Part("totalChunk") totalChunk: String,
        @Part("totalSize") totalSize: String,
        @Part("fileHash") fileHash: String,
        @Part("hashAlgorithm") hashAlgorithm: String,
        @Part("assetData") assetData: MultipartBody.Part
    ): NetworkResponse<UploadResult>

}